// 组合框(下拉列表)
package main

import (
	app "gitee.com/go_888/xcgui/xcgui/app"
	widget "gitee.com/go_888/xcgui/xcgui/widget"
	window "gitee.com/go_888/xcgui/xcgui/window"
	xc "gitee.com/go_888/xcgui/xcgui/xc"
	xcc "gitee.com/go_888/xcgui/xcgui/xcc"
	"strconv"
)

func main() {
	a := app.X创建(true)
	a.X启用DPI(true)
	a.X启用自动DPI(true)
	w := window.X创建窗口(0, 0, 400, 240, "ComboBox", 0, xcc.X窗口样式_默认样式)

	// 创建组合框
	cbb := widget.X创建组合框(24, 50, 100, 30, w.X句柄)
	// 创建数据适配器, 这个是必须创建的, 存储数据的
	cbb.X创建数据适配器()
	// 组合框加入项
	for i := 1; i <= 5; i++ {
		index := cbb.X添加项文本("item" + strconv.Itoa(i))
		// 有时候会想在每个项里存个值, 比如从数据库拿到分类名和id, 项文本是分类名, 每个项里存的值是分类id
		// 但没有直接给项存值的函数, 下面这是另一种方法, 你理解为给元素内置的一个map设置键和值就行
		id := i * 10 // 从数据库拿到的分类id
		cbb.X设置属性(xc.X整数32位转文本(index), strconv.Itoa(id))
	}

	// 组合框选中项
	cbb.X设置选择项(0)
	// 组合框禁止编辑项
	cbb.X启用编辑(false)

	// 创建编辑框
	edit := widget.X创建编辑框(138, 50, 150, 30, w.X句柄)
	edit.X设置默认文本("项文本")
	edit2 := widget.X创建编辑框(138, 90, 150, 30, w.X句柄)
	edit2.X设置默认文本("每个项对应的值")

	// 注册组合框被选择事件
	cbb.X事件_下拉列表项选择完成(func(iItem int32, pbHandled *bool) int {
		edit.X设置文本(cbb.X取项文本(iItem, 0))
		// 如果你是点击按钮取值的场景时, 可用 cbb.GetSelItem() 获取现在选中的项索引
		edit2.X设置文本(cbb.X取属性(xc.X整数32位转文本(iItem)))
		edit.X重绘(false)
		edit2.X重绘(false)
		return 0
	})

	w.X显示方式(xcc.SW_SHOW)
	a.X运行()
	a.X退出()
}
